﻿// 解释器模式 - 客户端代码
// 演示如何构建和使用表达式树
using System;
using System.Collections.Generic;

Console.WriteLine("解释器模式示例：布尔表达式计算");

// 构建表达式：(A AND B) OR (NOT C)
// 1. 创建终结符表达式（变量）
var a = new VariableExpression("A");  // 创建变量A
var b = new VariableExpression("B");  // 创建变量B
var c = new VariableExpression("C");  // 创建变量C

// 2. 构建复杂表达式树
var andExpr = new AndExpression(a, b);           // A AND B
var notExpr = new NotExpression(c);              // NOT C
var finalExpr = new OrExpression(andExpr, notExpr); // (A AND B) OR (NOT C)

// 3. 创建上下文环境，为变量赋值
// 上下文是一个字典，存储变量名和对应的值
var context = new Dictionary<string, bool>
{
    { "A", true },   // 变量A赋值为true
    { "B", false },  // 变量B赋值为false
    { "C", true }    // 变量C赋值为true
};

// 4. 执行解释操作
// 调用最终表达式的Interpret方法，传入上下文环境
bool result = finalExpr.Interpret(context);

// 计算过程说明：
// (A AND B) OR (NOT C) → (true AND false) OR (NOT true) → false OR false → false
Console.WriteLine($"表达式: (A AND B) OR (NOT C)");
Console.WriteLine($"变量值: A={context["A"]}, B={context["B"]}, C={context["C"]}");
Console.WriteLine($"计算结果: {result}"); // 输出: False